#ifndef SURFACE_H_
#define SURFACE_H_

#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <string>
#include "../common/utils/Logger.h"
#include "../SDLtoolkit/Color.h"
#include <iostream>
#include <math.h>

struct Rectangle {
	int x, y, w, h;
};

class Surface {

public:
	Surface();
	/*Crea una superficie con un archivo*/
	Surface(int x, int y, std::string path);

	/*Crea una sup vacía con las dimensiones para un SDL_Rect*/
	Surface(int x, int y, int w, int h);

	/*Crea una sup con la ubicación*/
	Surface(int x, int y, SDL_Surface* surface);

	/*Crea una sup con la ubicación forzando las dimenstiones de la superficie*/
    Surface(int x, int y, int w, int h, SDL_Surface* surface);


    Surface(int w, int h);

//    Surface(int w, int h, int rmask, int gmask, int bmask);

	/*Crea una superficie a partir de una SDL_Surface*/
	Surface(SDL_Surface* surface);

	~Surface();

	void SetVideoMode(int width, int height, int bpp, Uint32 flags);

	void loadSurfaceImage(std::string path);

	/*Devuelve el atributo surface*/
	SDL_Surface* getSurface();
	SDL_Rect getRectangle();
	Rectangle getRectangleStruc();

	/* Recibe una superficie.
	 * Aplica la sup recibida a la superficie actual a partir de x=0 e Y=0. */
	void applySurface(Surface* surface);

	/* Recibe una superficie y unas coordenadas.
	 * Aplica la sup recibida a la superficie actual a partir de las coordenadas recibidas*/
	void applySurface(Surface* surface, Rectangle rectangle);

	Surface* clone();

	void resize(int w, int h);

	const SDL_PixelFormat* getFormat();

private:
	SDL_Surface* surface;
	SDL_Rect rectangle;
	//void loadImage(std::string path);
	void updateDimensions(SDL_Rect* rect);

};

#endif /* SURFACE_H_ */
